
package se.sll.service.catalogue.gui.api.model;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Generated;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.codehaus.jackson.annotate.JsonAnyGetter;
import org.codehaus.jackson.annotate.JsonAnySetter;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonPropertyOrder;
import org.codehaus.jackson.map.annotate.JsonSerialize;


/**
 * A User creation or update request
 * 
 */
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
    "status",
    "hsaId",
    "realname",
    "email",
    "hsaID",
    "password",
    "role",
    "careUnitID"
})
public class UserCreate {

    /**
     * 
     * (Required)
     * 
     */
    @JsonProperty("status")
    @NotNull
    private String status;
    /**
     * 
     * (Required)
     * 
     */
    @JsonProperty("hsaId")
    @NotNull
    @Size(min = 1)
    private String hsaId;
    /**
     * 
     * (Required)
     * 
     */
    @JsonProperty("realname")
    @NotNull
    private String realname;
    /**
     * 
     * (Required)
     * 
     */
    @JsonProperty("email")
    @NotNull
    @Size(min = 1)
    private String email;
    /**
     * 
     */
    @JsonProperty("hsaID")
    private String hsaID;
    @JsonProperty("password")
    @Size(min = 8)
    private String password;
    /**
     * 
     */
    @JsonProperty("role")
    private String role;
    /**
     * a collection of Care Unit References
     * 
     */
    @JsonProperty("careUnitID")
    @Valid
    private List<CareUnit> careUnitID = new ArrayList<CareUnit>();
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    /**
     * 
     * (Required)
     * 
     * @return
     *     The status
     */
    @JsonProperty("status")
    public String getStatus() {
        return status;
    }

    /**
     * 
     * (Required)
     * 
     * @param status
     *     The status
     */
    @JsonProperty("status")
    public void setStatus(String status) {
        this.status = status;
    }

    public UserCreate withStatus(String status) {
        this.status = status;
        return this;
    }

    /**
     * 
     * (Required)
     * 
     * @return
     *     The hsaId
     */
    @JsonProperty("hsaId")
    public String getHsaId() {
        return hsaId;
    }

    /**
     * 
     * (Required)
     * 
     * @param hsaId
     *     The hsaId
     */
    @JsonProperty("hsaId")
    public void setHsaId(String hsaId) {
        this.hsaId = hsaId;
    }

    public UserCreate withHsaId(String hsaId) {
        this.hsaId = hsaId;
        return this;
    }

    /**
     * 
     * (Required)
     * 
     * @return
     *     The realname
     */
    @JsonProperty("realname")
    public String getRealname() {
        return realname;
    }

    /**
     * 
     * (Required)
     * 
     * @param realname
     *     The realname
     */
    @JsonProperty("realname")
    public void setRealname(String realname) {
        this.realname = realname;
    }

    public UserCreate withRealname(String realname) {
        this.realname = realname;
        return this;
    }

    /**
     * 
     * (Required)
     * 
     * @return
     *     The email
     */
    @JsonProperty("email")
    public String getEmail() {
        return email;
    }

    /**
     * 
     * (Required)
     * 
     * @param email
     *     The email
     */
    @JsonProperty("email")
    public void setEmail(String email) {
        this.email = email;
    }

    public UserCreate withEmail(String email) {
        this.email = email;
        return this;
    }

    /**
     * 
     * @return
     *     The hsaID
     */
    @JsonProperty("hsaID")
    public String getHsaID() {
        return hsaID;
    }

    /**
     * 
     * @param hsaID
     *     The hsaID
     */
    @JsonProperty("hsaID")
    public void setHsaID(String hsaID) {
        this.hsaID = hsaID;
    }

    public UserCreate withHsaID(String hsaID) {
        this.hsaID = hsaID;
        return this;
    }

    /**
     * 
     * @return
     *     The password
     */
    @JsonProperty("password")
    public String getPassword() {
        return password;
    }

    /**
     * 
     * @param password
     *     The password
     */
    @JsonProperty("password")
    public void setPassword(String password) {
        this.password = password;
    }

    public UserCreate withPassword(String password) {
        this.password = password;
        return this;
    }

    /**
     * 
     * @return
     *     The role
     */
    @JsonProperty("role")
    public String getRole() {
        return role;
    }

    /**
     * 
     * @param role
     *     The role
     */
    @JsonProperty("role")
    public void setRole(String role) {
        this.role = role;
    }

    public UserCreate withRole(String role) {
        this.role = role;
        return this;
    }

    /**
     * a collection of Care Unit References
     * 
     * @return
     *     The careUnitID
     */
    @JsonProperty("careUnitID")
    public List<CareUnit> getCareUnitID() {
        return careUnitID;
    }

    /**
     * a collection of Care Unit References
     * 
     * @param careUnitID
     *     The careUnitID
     */
    @JsonProperty("careUnitID")
    public void setCareUnitID(List<CareUnit> careUnitID) {
        this.careUnitID = careUnitID;
    }

    public UserCreate withCareUnitID(List<CareUnit> careUnitID) {
        this.careUnitID = careUnitID;
        return this;
    }

    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }

    public UserCreate withAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
        return this;
    }

}
